// #ifdef H5
import wx from 'jweixin-module'
// #endif
//sdkConfig
const _config = {
	debug: false, // 开启调试模式，线上需要修改为false
	// beta: true, //开启内测接口调用，注入 wx.invoke 和 wx.on 方法
	// appId: '', // 公众号的唯一标识
	jsApiList: [
		'checkJsApi', //判断当前客户端版本是否支持指定JS接口  
		'onMenuShareAppMessage', //分享接口  
		'getLocation', //获取位置  
		'openLocation', //打开位置  
		'scanQRCode', //扫一扫接口  
		'chooseWXPay', //微信支付  
		'chooseImage', //拍照或从手机相册中选图接口  
		// 'previewImage', //预览图片接口  
		// 'uploadImage', //上传图片  
		// 'requestWxFacePictureVerify', // 人脸识别
		// "checkIsSupportFaceDetect", //是否支持人脸识别
	], //需要使用的 JS 接口列表
	baseUrl: '',
	// appId
	H5APPID: "wx8f64eefee926ff73",
	// 接code的地址
	codeURL: '/h5/index.html#/pages/login/identity',
}
//消息
const _msg = (msg) => {
	uni.showToast({
		icon: "none",
		title: msg || 'error'
	})
}

let WXSDK = {};
// 获取token的方法,需要修改WXSDK.init token使用
WXSDK.getToken = () => {
	try {
		return uni.getStorageSync('token') || ''
	} catch (e) {
		//TODO handle the exception
		return ''
	}
}
// 查询初始化是否成功
WXSDK.ready = () => {
	//sb微信 我cnm 这就没办法用么
	return new Promise((resolve, reject) => {
		wx.ready(() => {
			resolve(true)
			return
		})
		wx.error(err => {
			reject(err)
			return
		})
	})
}
WXSDK.isWx = () => {
	let ua = window.navigator.userAgent.toLowerCase()
	if (ua.match(/micromessenger/i) == 'micromessenger') {
		return true
	} else {
		return false
	}
}
//登录
WXSDK.login = () => {
	let _wx = WXSDK.isWx()
	if (!_wx) return _msg('当前不是微信环境')
	//初始化登录方法
	let _url = encodeURIComponent('http://' + window.location.host + _config.codeURL);
	window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + _config.H5APPID +
		"&redirect_uri=" + _url + "&response_type=code&scope=snsapi_userinfo#wechat_redirect";
}
// 获取code
WXSDK.getCode = (name) => {
	// 未传参，返回空
	if (!name) return null;
	// 查询参数：先通过search取值，如果取不到就通过hash来取
	let after = window.location.search;
	after = after.substr(1) || window.location.hash.split('?')[1];
	// 地址栏URL没有查询参数，返回空
	if (!after) return null;
	// 如果查询参数中没有"name"，返回空
	if (after.indexOf(name) === -1) return null;
	let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
	// 当地址栏参数存在中文时，需要解码，不然会乱码
	let r = decodeURI(after).match(reg);
	// 如果url中"name"没有值，返回空
	if (!r) return null;
	return r[2];
}
// 初始化
WXSDK.init = async () => {
	let _wx = WXSDK.isWx()
	if (!_wx) return _msg('当前不是微信环境')
	//获取当前页面的url
	let url = window.location.href.split('#')[0];
	// 获取token
	let token = WXSDK.getToken()
	//发起请求,ret是个数组。0项错误，1是正确 
	let ret = await uni.request({
		url: _config.baseUrl,
		method: 'POST',
		header: {
			"Content-Type": "application/x-www-form-urlencoded",
			token: token, //token  token传递方式,请修改
		},
		data: {
			url
		} //发送的页面url
	});
	if (ret[0]) return _msg('获取微信配置失败')
	let {
		code,
		data,
		msg
	} = ret[1].data
	if (code != 0) return _msg(msg)
	//注入config权限配置  
	wx.config({
		appId: data.appId,
		timestamp: data.timestamp,
		nonceStr: data.nonceStr,
		signature: data.signature,
		..._config,
	});
	await WXSDK.ready()
}
// 获取位置
WXSDK.getLocation = async () => {
	await WXSDK.init()
	return new Promise((resolve, reject) => {
		wx.getLocation({
			type: 'gcj02', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
			success(res) {
				resolve(res)
			},
			fail(err) {
				reject(err)
			},

		})
	})
}
//支付
WXSDK.pay = async (data) => {
	await WXSDK.init()
	let config = {
		appId: data.appId,
		// 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
		timestamp: data.timeStamp,
		nonceStr: data.nonceStr, // 支付签名随机串，不长于 32 位
		package: data.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
		signType: data.signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
		paySign: data.paySign, // 支付签名 
	}

	return new Promise((resolve, reject) => {
		wx.chooseWXPay({
			...config,
			complete(ret) {
				// 接口调用完成时执行的回调函数，无论成功或失败都会执行
				if (ret.errMsg == 'chooseWXPay:ok') {
					resolve(ret)
					// 【支付成功】：支付成功提示页面，点击完成按钮之后
				} else if (ret.errMsg == 'chooseWXPay:cancel') {
					// 【支付取消】 
					reject(ret)
				} else {
					reject(ret)
				}
			},
		})
	})
}
//是否支持某项接口 //传递为list ['apiName']
WXSDK.isApi = async (api) => {
	await WXSDK.init()
	return new Promise((resolve, reject) => {
		wx.checkJsApi({
			jsApiList: api, // 需要检测的 JS 接口列表
			success(res) {
				resolve(res)
				// 以键值对的形式返回，可用的 api 值true，不可用为false
				// 如：{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
			},
			fail(err) {
				reject(err)
			},
		});
	})
}
//分享给朋友
WXSDK.shareApp = async (data) => {
	await WXSDK.init()
	return new Promise((resolve, reject) => {
		wx.onMenuShareAppMessage({
			title: data.title || '', // 分享标题
			desc: data.desc || '', // 分享描述
			link: data.link || '', // 分享链接，该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致
			imgUrl: data.imgUrl || '', // 分享图标
			type: data.type || '', // 分享类型,music、video或link，不填默认为link
			dataUrl: data.dataUrl || '', // 如果 type 是music或video，则要提供数据链接，默认为空
			success(res) {
				resolve(res)
			},
			fail(err) {
				reject(err)
			},
		});

	})
}
// #ifdef H5
export default WXSDK
// #endif